(0) Obligation:

Runtime Complexity Relative TRS:
The TRS R consists of the following rules:

qs(x', Cons(x, xs)) → app(Cons(x, Nil), Cons(x', quicksort(xs)))
quicksort(Cons(x, Cons(x', xs))) → qs(x, part(x, Cons(x', xs), Nil, Nil))
quicksort(Cons(x, Nil)) → Cons(x, Nil)
quicksort(Nil) → Nil
part(x', Cons(x, xs), xs1, xs2) → part[Ite](>(x', x), x', Cons(x, xs), xs1, xs2)
part(x, Nil, xs1, xs2) → app(xs1, xs2)
app(Cons(x, xs), ys) → Cons(x, app(xs, ys))
app(Nil, ys) → ys
notEmpty(Cons(x, xs)) → True
notEmpty(Nil) → False

The (relative) TRS S consists of the following rules:

<(S(x), S(y)) → <(x, y)
<(0, S(y)) → True
<(x, 0) → False
>(S(x), S(y)) → >(x, y)
>(0, y) → False
>(S(x), 0) → True
part[Ite](True, x', Cons(x, xs), xs1, xs2) → part(x', xs, Cons(x, xs1), xs2)
part[False][Ite](True, x', Cons(x, xs), xs1, xs2) → part(x', xs, xs1, Cons(x, xs2))
part[Ite](False, x', Cons(x, xs), xs1, xs2) → part[False][Ite](<(x', x), x', Cons(x, xs), xs1, xs2)
part[False][Ite](False, x', Cons(x, xs), xs1, xs2) → part(x', xs, xs1, xs2)

Rewrite Strategy: INNERMOST

(1) RenamingProof (EQUIVALENT transformation)

Renamed function symbols to avoid clashes with predefined symbol.

(2) Obligation:

Runtime Complexity Relative TRS:
The TRS R consists of the following rules:

qs(x', Cons(x, xs)) → app(Cons(x, Nil), Cons(x', quicksort(xs)))
quicksort(Cons(x, Cons(x', xs))) → qs(x, part(x, Cons(x', xs), Nil, Nil))
quicksort(Cons(x, Nil)) → Cons(x, Nil)
quicksort(Nil) → Nil
part(x', Cons(x, xs), xs1, xs2) → part[Ite](>(x', x), x', Cons(x, xs), xs1, xs2)
part(x, Nil, xs1, xs2) → app(xs1, xs2)
app(Cons(x, xs), ys) → Cons(x, app(xs, ys))
app(Nil, ys) → ys
notEmpty(Cons(x, xs)) → True
notEmpty(Nil) → False

The (relative) TRS S consists of the following rules:

<(S(x), S(y)) → <(x, y)
<(0', S(y)) → True
<(x, 0') → False
>(S(x), S(y)) → >(x, y)
>(0', y) → False
>(S(x), 0') → True
part[Ite](True, x', Cons(x, xs), xs1, xs2) → part(x', xs, Cons(x, xs1), xs2)
part[False][Ite](True, x', Cons(x, xs), xs1, xs2) → part(x', xs, xs1, Cons(x, xs2))
part[Ite](False, x', Cons(x, xs), xs1, xs2) → part[False][Ite](<(x', x), x', Cons(x, xs), xs1, xs2)
part[False][Ite](False, x', Cons(x, xs), xs1, xs2) → part(x', xs, xs1, xs2)

Rewrite Strategy: INNERMOST

(3) TypeInferenceProof (BOTH BOUNDS(ID, ID) transformation)

Infered types.

(4) Obligation:

Innermost TRS:
Rules:
qs(x', Cons(x, xs)) → app(Cons(x, Nil), Cons(x', quicksort(xs)))
quicksort(Cons(x, Cons(x', xs))) → qs(x, part(x, Cons(x', xs), Nil, Nil))
quicksort(Cons(x, Nil)) → Cons(x, Nil)
quicksort(Nil) → Nil
part(x', Cons(x, xs), xs1, xs2) → part[Ite](>(x', x), x', Cons(x, xs), xs1, xs2)
part(x, Nil, xs1, xs2) → app(xs1, xs2)
app(Cons(x, xs), ys) → Cons(x, app(xs, ys))
app(Nil, ys) → ys
notEmpty(Cons(x, xs)) → True
notEmpty(Nil) → False
<(S(x), S(y)) → <(x, y)
<(0', S(y)) → True
<(x, 0') → False
>(S(x), S(y)) → >(x, y)
>(0', y) → False
>(S(x), 0') → True
part[Ite](True, x', Cons(x, xs), xs1, xs2) → part(x', xs, Cons(x, xs1), xs2)
part[False][Ite](True, x', Cons(x, xs), xs1, xs2) → part(x', xs, xs1, Cons(x, xs2))
part[Ite](False, x', Cons(x, xs), xs1, xs2) → part[False][Ite](<(x', x), x', Cons(x, xs), xs1, xs2)
part[False][Ite](False, x', Cons(x, xs), xs1, xs2) → part(x', xs, xs1, xs2)

Types:
qs :: S:0' → Cons:Nil → Cons:Nil
Cons :: S:0' → Cons:Nil → Cons:Nil
app :: Cons:Nil → Cons:Nil → Cons:Nil
Nil :: Cons:Nil
quicksort :: Cons:Nil → Cons:Nil
part :: S:0' → Cons:Nil → Cons:Nil → Cons:Nil → Cons:Nil
part[Ite] :: True:False → S:0' → Cons:Nil → Cons:Nil → Cons:Nil → Cons:Nil
> :: S:0' → S:0' → True:False
notEmpty :: Cons:Nil → True:False
True :: True:False
False :: True:False
< :: S:0' → S:0' → True:False
S :: S:0' → S:0'
0' :: S:0'
part[False][Ite] :: True:False → S:0' → Cons:Nil → Cons:Nil → Cons:Nil → Cons:Nil
hole_Cons:Nil1_0 :: Cons:Nil
hole_S:0'2_0 :: S:0'
hole_True:False3_0 :: True:False
gen_Cons:Nil4_0 :: Nat → Cons:Nil
gen_S:0'5_0 :: Nat → S:0'

(5) OrderProof (LOWER BOUND(ID) transformation)

Heuristically decided to analyse the following defined symbols:
app, quicksort, part, >, <

They will be analysed ascendingly in the following order:
app < quicksort
app < part
part < quicksort
> < part
< < part

(6) Obligation:

Innermost TRS:
Rules:
qs(x', Cons(x, xs)) → app(Cons(x, Nil), Cons(x', quicksort(xs)))
quicksort(Cons(x, Cons(x', xs))) → qs(x, part(x, Cons(x', xs), Nil, Nil))
quicksort(Cons(x, Nil)) → Cons(x, Nil)
quicksort(Nil) → Nil
part(x', Cons(x, xs), xs1, xs2) → part[Ite](>(x', x), x', Cons(x, xs), xs1, xs2)
part(x, Nil, xs1, xs2) → app(xs1, xs2)
app(Cons(x, xs), ys) → Cons(x, app(xs, ys))
app(Nil, ys) → ys
notEmpty(Cons(x, xs)) → True
notEmpty(Nil) → False
<(S(x), S(y)) → <(x, y)
<(0', S(y)) → True
<(x, 0') → False
>(S(x), S(y)) → >(x, y)
>(0', y) → False
>(S(x), 0') → True
part[Ite](True, x', Cons(x, xs), xs1, xs2) → part(x', xs, Cons(x, xs1), xs2)
part[False][Ite](True, x', Cons(x, xs), xs1, xs2) → part(x', xs, xs1, Cons(x, xs2))
part[Ite](False, x', Cons(x, xs), xs1, xs2) → part[False][Ite](<(x', x), x', Cons(x, xs), xs1, xs2)
part[False][Ite](False, x', Cons(x, xs), xs1, xs2) → part(x', xs, xs1, xs2)

Types:
qs :: S:0' → Cons:Nil → Cons:Nil
Cons :: S:0' → Cons:Nil → Cons:Nil
app :: Cons:Nil → Cons:Nil → Cons:Nil
Nil :: Cons:Nil
quicksort :: Cons:Nil → Cons:Nil
part :: S:0' → Cons:Nil → Cons:Nil → Cons:Nil → Cons:Nil
part[Ite] :: True:False → S:0' → Cons:Nil → Cons:Nil → Cons:Nil → Cons:Nil
> :: S:0' → S:0' → True:False
notEmpty :: Cons:Nil → True:False
True :: True:False
False :: True:False
< :: S:0' → S:0' → True:False
S :: S:0' → S:0'
0' :: S:0'
part[False][Ite] :: True:False → S:0' → Cons:Nil → Cons:Nil → Cons:Nil → Cons:Nil
hole_Cons:Nil1_0 :: Cons:Nil
hole_S:0'2_0 :: S:0'
hole_True:False3_0 :: True:False
gen_Cons:Nil4_0 :: Nat → Cons:Nil
gen_S:0'5_0 :: Nat → S:0'

Generator Equations:
gen_Cons:Nil4_0(0) ⇔ Nil
gen_Cons:Nil4_0(+(x, 1)) ⇔ Cons(0', gen_Cons:Nil4_0(x))
gen_S:0'5_0(0) ⇔ 0'
gen_S:0'5_0(+(x, 1)) ⇔ S(gen_S:0'5_0(x))

The following defined symbols remain to be analysed:
app, quicksort, part, >, <

They will be analysed ascendingly in the following order:
app < quicksort
app < part
part < quicksort
> < part
< < part

(7) RewriteLemmaProof (LOWER BOUND(ID) transformation)

Proved the following rewrite lemma:
app(gen_Cons:Nil4_0(n7_0), gen_Cons:Nil4_0(b)) → gen_Cons:Nil4_0(+(n7_0, b)), rt ∈ Ω(1 + n70)

Induction Base:
app(gen_Cons:Nil4_0(0), gen_Cons:Nil4_0(b)) →RΩ(1)
gen_Cons:Nil4_0(b)

Induction Step:
app(gen_Cons:Nil4_0(+(n7_0, 1)), gen_Cons:Nil4_0(b)) →RΩ(1)
Cons(0', app(gen_Cons:Nil4_0(n7_0), gen_Cons:Nil4_0(b))) →IH
Cons(0', gen_Cons:Nil4_0(+(b, c8_0)))

We have rt ∈ Ω(n1) and sz ∈ O(n). Thus, we have ircR ∈ Ω(n).

(8) Complex Obligation (BEST)

(9) Obligation:

Innermost TRS:
Rules:
qs(x', Cons(x, xs)) → app(Cons(x, Nil), Cons(x', quicksort(xs)))
quicksort(Cons(x, Cons(x', xs))) → qs(x, part(x, Cons(x', xs), Nil, Nil))
quicksort(Cons(x, Nil)) → Cons(x, Nil)
quicksort(Nil) → Nil
part(x', Cons(x, xs), xs1, xs2) → part[Ite](>(x', x), x', Cons(x, xs), xs1, xs2)
part(x, Nil, xs1, xs2) → app(xs1, xs2)
app(Cons(x, xs), ys) → Cons(x, app(xs, ys))
app(Nil, ys) → ys
notEmpty(Cons(x, xs)) → True
notEmpty(Nil) → False
<(S(x), S(y)) → <(x, y)
<(0', S(y)) → True
<(x, 0') → False
>(S(x), S(y)) → >(x, y)
>(0', y) → False
>(S(x), 0') → True
part[Ite](True, x', Cons(x, xs), xs1, xs2) → part(x', xs, Cons(x, xs1), xs2)
part[False][Ite](True, x', Cons(x, xs), xs1, xs2) → part(x', xs, xs1, Cons(x, xs2))
part[Ite](False, x', Cons(x, xs), xs1, xs2) → part[False][Ite](<(x', x), x', Cons(x, xs), xs1, xs2)
part[False][Ite](False, x', Cons(x, xs), xs1, xs2) → part(x', xs, xs1, xs2)

Types:
qs :: S:0' → Cons:Nil → Cons:Nil
Cons :: S:0' → Cons:Nil → Cons:Nil
app :: Cons:Nil → Cons:Nil → Cons:Nil
Nil :: Cons:Nil
quicksort :: Cons:Nil → Cons:Nil
part :: S:0' → Cons:Nil → Cons:Nil → Cons:Nil → Cons:Nil
part[Ite] :: True:False → S:0' → Cons:Nil → Cons:Nil → Cons:Nil → Cons:Nil
> :: S:0' → S:0' → True:False
notEmpty :: Cons:Nil → True:False
True :: True:False
False :: True:False
< :: S:0' → S:0' → True:False
S :: S:0' → S:0'
0' :: S:0'
part[False][Ite] :: True:False → S:0' → Cons:Nil → Cons:Nil → Cons:Nil → Cons:Nil
hole_Cons:Nil1_0 :: Cons:Nil
hole_S:0'2_0 :: S:0'
hole_True:False3_0 :: True:False
gen_Cons:Nil4_0 :: Nat → Cons:Nil
gen_S:0'5_0 :: Nat → S:0'

Lemmas:
app(gen_Cons:Nil4_0(n7_0), gen_Cons:Nil4_0(b)) → gen_Cons:Nil4_0(+(n7_0, b)), rt ∈ Ω(1 + n70)

Generator Equations:
gen_Cons:Nil4_0(0) ⇔ Nil
gen_Cons:Nil4_0(+(x, 1)) ⇔ Cons(0', gen_Cons:Nil4_0(x))
gen_S:0'5_0(0) ⇔ 0'
gen_S:0'5_0(+(x, 1)) ⇔ S(gen_S:0'5_0(x))

The following defined symbols remain to be analysed:
>, quicksort, part, <

They will be analysed ascendingly in the following order:
part < quicksort
> < part
< < part

(10) RewriteLemmaProof (LOWER BOUND(ID) transformation)

Proved the following rewrite lemma:
>(gen_S:0'5_0(n916_0), gen_S:0'5_0(n916_0)) → False, rt ∈ Ω(0)

Induction Base:
>(gen_S:0'5_0(0), gen_S:0'5_0(0)) →RΩ(0)
False

Induction Step:
>(gen_S:0'5_0(+(n916_0, 1)), gen_S:0'5_0(+(n916_0, 1))) →RΩ(0)
>(gen_S:0'5_0(n916_0), gen_S:0'5_0(n916_0)) →IH
False

We have rt ∈ Ω(1) and sz ∈ O(n). Thus, we have ircR ∈ Ω(n0).

(11) Complex Obligation (BEST)

(12) Obligation:

Innermost TRS:
Rules:
qs(x', Cons(x, xs)) → app(Cons(x, Nil), Cons(x', quicksort(xs)))
quicksort(Cons(x, Cons(x', xs))) → qs(x, part(x, Cons(x', xs), Nil, Nil))
quicksort(Cons(x, Nil)) → Cons(x, Nil)
quicksort(Nil) → Nil
part(x', Cons(x, xs), xs1, xs2) → part[Ite](>(x', x), x', Cons(x, xs), xs1, xs2)
part(x, Nil, xs1, xs2) → app(xs1, xs2)
app(Cons(x, xs), ys) → Cons(x, app(xs, ys))
app(Nil, ys) → ys
notEmpty(Cons(x, xs)) → True
notEmpty(Nil) → False
<(S(x), S(y)) → <(x, y)
<(0', S(y)) → True
<(x, 0') → False
>(S(x), S(y)) → >(x, y)
>(0', y) → False
>(S(x), 0') → True
part[Ite](True, x', Cons(x, xs), xs1, xs2) → part(x', xs, Cons(x, xs1), xs2)
part[False][Ite](True, x', Cons(x, xs), xs1, xs2) → part(x', xs, xs1, Cons(x, xs2))
part[Ite](False, x', Cons(x, xs), xs1, xs2) → part[False][Ite](<(x', x), x', Cons(x, xs), xs1, xs2)
part[False][Ite](False, x', Cons(x, xs), xs1, xs2) → part(x', xs, xs1, xs2)

Types:
qs :: S:0' → Cons:Nil → Cons:Nil
Cons :: S:0' → Cons:Nil → Cons:Nil
app :: Cons:Nil → Cons:Nil → Cons:Nil
Nil :: Cons:Nil
quicksort :: Cons:Nil → Cons:Nil
part :: S:0' → Cons:Nil → Cons:Nil → Cons:Nil → Cons:Nil
part[Ite] :: True:False → S:0' → Cons:Nil → Cons:Nil → Cons:Nil → Cons:Nil
> :: S:0' → S:0' → True:False
notEmpty :: Cons:Nil → True:False
True :: True:False
False :: True:False
< :: S:0' → S:0' → True:False
S :: S:0' → S:0'
0' :: S:0'
part[False][Ite] :: True:False → S:0' → Cons:Nil → Cons:Nil → Cons:Nil → Cons:Nil
hole_Cons:Nil1_0 :: Cons:Nil
hole_S:0'2_0 :: S:0'
hole_True:False3_0 :: True:False
gen_Cons:Nil4_0 :: Nat → Cons:Nil
gen_S:0'5_0 :: Nat → S:0'

Lemmas:
app(gen_Cons:Nil4_0(n7_0), gen_Cons:Nil4_0(b)) → gen_Cons:Nil4_0(+(n7_0, b)), rt ∈ Ω(1 + n70)
>(gen_S:0'5_0(n916_0), gen_S:0'5_0(n916_0)) → False, rt ∈ Ω(0)

Generator Equations:
gen_Cons:Nil4_0(0) ⇔ Nil
gen_Cons:Nil4_0(+(x, 1)) ⇔ Cons(0', gen_Cons:Nil4_0(x))
gen_S:0'5_0(0) ⇔ 0'
gen_S:0'5_0(+(x, 1)) ⇔ S(gen_S:0'5_0(x))

The following defined symbols remain to be analysed:
<, quicksort, part

They will be analysed ascendingly in the following order:
part < quicksort
< < part

(13) RewriteLemmaProof (LOWER BOUND(ID) transformation)

Proved the following rewrite lemma:
<(gen_S:0'5_0(n1221_0), gen_S:0'5_0(+(1, n1221_0))) → True, rt ∈ Ω(0)

Induction Base:
<(gen_S:0'5_0(0), gen_S:0'5_0(+(1, 0))) →RΩ(0)
True

Induction Step:
<(gen_S:0'5_0(+(n1221_0, 1)), gen_S:0'5_0(+(1, +(n1221_0, 1)))) →RΩ(0)
<(gen_S:0'5_0(n1221_0), gen_S:0'5_0(+(1, n1221_0))) →IH
True

We have rt ∈ Ω(1) and sz ∈ O(n). Thus, we have ircR ∈ Ω(n0).

(14) Complex Obligation (BEST)

(15) Obligation:

Innermost TRS:
Rules:
qs(x', Cons(x, xs)) → app(Cons(x, Nil), Cons(x', quicksort(xs)))
quicksort(Cons(x, Cons(x', xs))) → qs(x, part(x, Cons(x', xs), Nil, Nil))
quicksort(Cons(x, Nil)) → Cons(x, Nil)
quicksort(Nil) → Nil
part(x', Cons(x, xs), xs1, xs2) → part[Ite](>(x', x), x', Cons(x, xs), xs1, xs2)
part(x, Nil, xs1, xs2) → app(xs1, xs2)
app(Cons(x, xs), ys) → Cons(x, app(xs, ys))
app(Nil, ys) → ys
notEmpty(Cons(x, xs)) → True
notEmpty(Nil) → False
<(S(x), S(y)) → <(x, y)
<(0', S(y)) → True
<(x, 0') → False
>(S(x), S(y)) → >(x, y)
>(0', y) → False
>(S(x), 0') → True
part[Ite](True, x', Cons(x, xs), xs1, xs2) → part(x', xs, Cons(x, xs1), xs2)
part[False][Ite](True, x', Cons(x, xs), xs1, xs2) → part(x', xs, xs1, Cons(x, xs2))
part[Ite](False, x', Cons(x, xs), xs1, xs2) → part[False][Ite](<(x', x), x', Cons(x, xs), xs1, xs2)
part[False][Ite](False, x', Cons(x, xs), xs1, xs2) → part(x', xs, xs1, xs2)

Types:
qs :: S:0' → Cons:Nil → Cons:Nil
Cons :: S:0' → Cons:Nil → Cons:Nil
app :: Cons:Nil → Cons:Nil → Cons:Nil
Nil :: Cons:Nil
quicksort :: Cons:Nil → Cons:Nil
part :: S:0' → Cons:Nil → Cons:Nil → Cons:Nil → Cons:Nil
part[Ite] :: True:False → S:0' → Cons:Nil → Cons:Nil → Cons:Nil → Cons:Nil
> :: S:0' → S:0' → True:False
notEmpty :: Cons:Nil → True:False
True :: True:False
False :: True:False
< :: S:0' → S:0' → True:False
S :: S:0' → S:0'
0' :: S:0'
part[False][Ite] :: True:False → S:0' → Cons:Nil → Cons:Nil → Cons:Nil → Cons:Nil
hole_Cons:Nil1_0 :: Cons:Nil
hole_S:0'2_0 :: S:0'
hole_True:False3_0 :: True:False
gen_Cons:Nil4_0 :: Nat → Cons:Nil
gen_S:0'5_0 :: Nat → S:0'

Lemmas:
app(gen_Cons:Nil4_0(n7_0), gen_Cons:Nil4_0(b)) → gen_Cons:Nil4_0(+(n7_0, b)), rt ∈ Ω(1 + n70)
>(gen_S:0'5_0(n916_0), gen_S:0'5_0(n916_0)) → False, rt ∈ Ω(0)
<(gen_S:0'5_0(n1221_0), gen_S:0'5_0(+(1, n1221_0))) → True, rt ∈ Ω(0)

Generator Equations:
gen_Cons:Nil4_0(0) ⇔ Nil
gen_Cons:Nil4_0(+(x, 1)) ⇔ Cons(0', gen_Cons:Nil4_0(x))
gen_S:0'5_0(0) ⇔ 0'
gen_S:0'5_0(+(x, 1)) ⇔ S(gen_S:0'5_0(x))

The following defined symbols remain to be analysed:
part, quicksort

They will be analysed ascendingly in the following order:
part < quicksort

(16) RewriteLemmaProof (LOWER BOUND(ID) transformation)

Proved the following rewrite lemma:
part(gen_S:0'5_0(0), gen_Cons:Nil4_0(n1532_0), gen_Cons:Nil4_0(c), gen_Cons:Nil4_0(d)) → gen_Cons:Nil4_0(+(c, d)), rt ∈ Ω(1 + c + n15320)

Induction Base:
part(gen_S:0'5_0(0), gen_Cons:Nil4_0(0), gen_Cons:Nil4_0(c), gen_Cons:Nil4_0(d)) →RΩ(1)
app(gen_Cons:Nil4_0(c), gen_Cons:Nil4_0(d)) →LΩ(1 + c)
gen_Cons:Nil4_0(+(c, d))

Induction Step:
part(gen_S:0'5_0(0), gen_Cons:Nil4_0(+(n1532_0, 1)), gen_Cons:Nil4_0(c), gen_Cons:Nil4_0(d)) →RΩ(1)
part[Ite](>(gen_S:0'5_0(0), 0'), gen_S:0'5_0(0), Cons(0', gen_Cons:Nil4_0(n1532_0)), gen_Cons:Nil4_0(c), gen_Cons:Nil4_0(d)) →LΩ(0)
part[Ite](False, gen_S:0'5_0(0), Cons(0', gen_Cons:Nil4_0(n1532_0)), gen_Cons:Nil4_0(c), gen_Cons:Nil4_0(d)) →RΩ(0)
part[False][Ite](<(gen_S:0'5_0(0), 0'), gen_S:0'5_0(0), Cons(0', gen_Cons:Nil4_0(n1532_0)), gen_Cons:Nil4_0(c), gen_Cons:Nil4_0(d)) →RΩ(0)
part[False][Ite](False, gen_S:0'5_0(0), Cons(0', gen_Cons:Nil4_0(n1532_0)), gen_Cons:Nil4_0(c), gen_Cons:Nil4_0(d)) →RΩ(0)
part(gen_S:0'5_0(0), gen_Cons:Nil4_0(n1532_0), gen_Cons:Nil4_0(c), gen_Cons:Nil4_0(d)) →IH
gen_Cons:Nil4_0(+(c, d))

We have rt ∈ Ω(n1) and sz ∈ O(n). Thus, we have ircR ∈ Ω(n).

(17) Complex Obligation (BEST)

(18) Obligation:

Innermost TRS:
Rules:
qs(x', Cons(x, xs)) → app(Cons(x, Nil), Cons(x', quicksort(xs)))
quicksort(Cons(x, Cons(x', xs))) → qs(x, part(x, Cons(x', xs), Nil, Nil))
quicksort(Cons(x, Nil)) → Cons(x, Nil)
quicksort(Nil) → Nil
part(x', Cons(x, xs), xs1, xs2) → part[Ite](>(x', x), x', Cons(x, xs), xs1, xs2)
part(x, Nil, xs1, xs2) → app(xs1, xs2)
app(Cons(x, xs), ys) → Cons(x, app(xs, ys))
app(Nil, ys) → ys
notEmpty(Cons(x, xs)) → True
notEmpty(Nil) → False
<(S(x), S(y)) → <(x, y)
<(0', S(y)) → True
<(x, 0') → False
>(S(x), S(y)) → >(x, y)
>(0', y) → False
>(S(x), 0') → True
part[Ite](True, x', Cons(x, xs), xs1, xs2) → part(x', xs, Cons(x, xs1), xs2)
part[False][Ite](True, x', Cons(x, xs), xs1, xs2) → part(x', xs, xs1, Cons(x, xs2))
part[Ite](False, x', Cons(x, xs), xs1, xs2) → part[False][Ite](<(x', x), x', Cons(x, xs), xs1, xs2)
part[False][Ite](False, x', Cons(x, xs), xs1, xs2) → part(x', xs, xs1, xs2)

Types:
qs :: S:0' → Cons:Nil → Cons:Nil
Cons :: S:0' → Cons:Nil → Cons:Nil
app :: Cons:Nil → Cons:Nil → Cons:Nil
Nil :: Cons:Nil
quicksort :: Cons:Nil → Cons:Nil
part :: S:0' → Cons:Nil → Cons:Nil → Cons:Nil → Cons:Nil
part[Ite] :: True:False → S:0' → Cons:Nil → Cons:Nil → Cons:Nil → Cons:Nil
> :: S:0' → S:0' → True:False
notEmpty :: Cons:Nil → True:False
True :: True:False
False :: True:False
< :: S:0' → S:0' → True:False
S :: S:0' → S:0'
0' :: S:0'
part[False][Ite] :: True:False → S:0' → Cons:Nil → Cons:Nil → Cons:Nil → Cons:Nil
hole_Cons:Nil1_0 :: Cons:Nil
hole_S:0'2_0 :: S:0'
hole_True:False3_0 :: True:False
gen_Cons:Nil4_0 :: Nat → Cons:Nil
gen_S:0'5_0 :: Nat → S:0'

Lemmas:
app(gen_Cons:Nil4_0(n7_0), gen_Cons:Nil4_0(b)) → gen_Cons:Nil4_0(+(n7_0, b)), rt ∈ Ω(1 + n70)
>(gen_S:0'5_0(n916_0), gen_S:0'5_0(n916_0)) → False, rt ∈ Ω(0)
<(gen_S:0'5_0(n1221_0), gen_S:0'5_0(+(1, n1221_0))) → True, rt ∈ Ω(0)
part(gen_S:0'5_0(0), gen_Cons:Nil4_0(n1532_0), gen_Cons:Nil4_0(c), gen_Cons:Nil4_0(d)) → gen_Cons:Nil4_0(+(c, d)), rt ∈ Ω(1 + c + n15320)

Generator Equations:
gen_Cons:Nil4_0(0) ⇔ Nil
gen_Cons:Nil4_0(+(x, 1)) ⇔ Cons(0', gen_Cons:Nil4_0(x))
gen_S:0'5_0(0) ⇔ 0'
gen_S:0'5_0(+(x, 1)) ⇔ S(gen_S:0'5_0(x))

The following defined symbols remain to be analysed:
quicksort

(19) NoRewriteLemmaProof (LOWER BOUND(ID) transformation)

Could not prove a rewrite lemma for the defined symbol quicksort.

(20) Obligation:

Innermost TRS:
Rules:
qs(x', Cons(x, xs)) → app(Cons(x, Nil), Cons(x', quicksort(xs)))
quicksort(Cons(x, Cons(x', xs))) → qs(x, part(x, Cons(x', xs), Nil, Nil))
quicksort(Cons(x, Nil)) → Cons(x, Nil)
quicksort(Nil) → Nil
part(x', Cons(x, xs), xs1, xs2) → part[Ite](>(x', x), x', Cons(x, xs), xs1, xs2)
part(x, Nil, xs1, xs2) → app(xs1, xs2)
app(Cons(x, xs), ys) → Cons(x, app(xs, ys))
app(Nil, ys) → ys
notEmpty(Cons(x, xs)) → True
notEmpty(Nil) → False
<(S(x), S(y)) → <(x, y)
<(0', S(y)) → True
<(x, 0') → False
>(S(x), S(y)) → >(x, y)
>(0', y) → False
>(S(x), 0') → True
part[Ite](True, x', Cons(x, xs), xs1, xs2) → part(x', xs, Cons(x, xs1), xs2)
part[False][Ite](True, x', Cons(x, xs), xs1, xs2) → part(x', xs, xs1, Cons(x, xs2))
part[Ite](False, x', Cons(x, xs), xs1, xs2) → part[False][Ite](<(x', x), x', Cons(x, xs), xs1, xs2)
part[False][Ite](False, x', Cons(x, xs), xs1, xs2) → part(x', xs, xs1, xs2)

Types:
qs :: S:0' → Cons:Nil → Cons:Nil
Cons :: S:0' → Cons:Nil → Cons:Nil
app :: Cons:Nil → Cons:Nil → Cons:Nil
Nil :: Cons:Nil
quicksort :: Cons:Nil → Cons:Nil
part :: S:0' → Cons:Nil → Cons:Nil → Cons:Nil → Cons:Nil
part[Ite] :: True:False → S:0' → Cons:Nil → Cons:Nil → Cons:Nil → Cons:Nil
> :: S:0' → S:0' → True:False
notEmpty :: Cons:Nil → True:False
True :: True:False
False :: True:False
< :: S:0' → S:0' → True:False
S :: S:0' → S:0'
0' :: S:0'
part[False][Ite] :: True:False → S:0' → Cons:Nil → Cons:Nil → Cons:Nil → Cons:Nil
hole_Cons:Nil1_0 :: Cons:Nil
hole_S:0'2_0 :: S:0'
hole_True:False3_0 :: True:False
gen_Cons:Nil4_0 :: Nat → Cons:Nil
gen_S:0'5_0 :: Nat → S:0'

Lemmas:
app(gen_Cons:Nil4_0(n7_0), gen_Cons:Nil4_0(b)) → gen_Cons:Nil4_0(+(n7_0, b)), rt ∈ Ω(1 + n70)
>(gen_S:0'5_0(n916_0), gen_S:0'5_0(n916_0)) → False, rt ∈ Ω(0)
<(gen_S:0'5_0(n1221_0), gen_S:0'5_0(+(1, n1221_0))) → True, rt ∈ Ω(0)
part(gen_S:0'5_0(0), gen_Cons:Nil4_0(n1532_0), gen_Cons:Nil4_0(c), gen_Cons:Nil4_0(d)) → gen_Cons:Nil4_0(+(c, d)), rt ∈ Ω(1 + c + n15320)

Generator Equations:
gen_Cons:Nil4_0(0) ⇔ Nil
gen_Cons:Nil4_0(+(x, 1)) ⇔ Cons(0', gen_Cons:Nil4_0(x))
gen_S:0'5_0(0) ⇔ 0'
gen_S:0'5_0(+(x, 1)) ⇔ S(gen_S:0'5_0(x))

No more defined symbols left to analyse.

(21) LowerBoundsProof (EQUIVALENT transformation)

The lowerbound Ω(n1) was proven with the following lemma:
app(gen_Cons:Nil4_0(n7_0), gen_Cons:Nil4_0(b)) → gen_Cons:Nil4_0(+(n7_0, b)), rt ∈ Ω(1 + n70)

(22) BOUNDS(n^1, INF)

(23) Obligation:

Innermost TRS:
Rules:
qs(x', Cons(x, xs)) → app(Cons(x, Nil), Cons(x', quicksort(xs)))
quicksort(Cons(x, Cons(x', xs))) → qs(x, part(x, Cons(x', xs), Nil, Nil))
quicksort(Cons(x, Nil)) → Cons(x, Nil)
quicksort(Nil) → Nil
part(x', Cons(x, xs), xs1, xs2) → part[Ite](>(x', x), x', Cons(x, xs), xs1, xs2)
part(x, Nil, xs1, xs2) → app(xs1, xs2)
app(Cons(x, xs), ys) → Cons(x, app(xs, ys))
app(Nil, ys) → ys
notEmpty(Cons(x, xs)) → True
notEmpty(Nil) → False
<(S(x), S(y)) → <(x, y)
<(0', S(y)) → True
<(x, 0') → False
>(S(x), S(y)) → >(x, y)
>(0', y) → False
>(S(x), 0') → True
part[Ite](True, x', Cons(x, xs), xs1, xs2) → part(x', xs, Cons(x, xs1), xs2)
part[False][Ite](True, x', Cons(x, xs), xs1, xs2) → part(x', xs, xs1, Cons(x, xs2))
part[Ite](False, x', Cons(x, xs), xs1, xs2) → part[False][Ite](<(x', x), x', Cons(x, xs), xs1, xs2)
part[False][Ite](False, x', Cons(x, xs), xs1, xs2) → part(x', xs, xs1, xs2)

Types:
qs :: S:0' → Cons:Nil → Cons:Nil
Cons :: S:0' → Cons:Nil → Cons:Nil
app :: Cons:Nil → Cons:Nil → Cons:Nil
Nil :: Cons:Nil
quicksort :: Cons:Nil → Cons:Nil
part :: S:0' → Cons:Nil → Cons:Nil → Cons:Nil → Cons:Nil
part[Ite] :: True:False → S:0' → Cons:Nil → Cons:Nil → Cons:Nil → Cons:Nil
> :: S:0' → S:0' → True:False
notEmpty :: Cons:Nil → True:False
True :: True:False
False :: True:False
< :: S:0' → S:0' → True:False
S :: S:0' → S:0'
0' :: S:0'
part[False][Ite] :: True:False → S:0' → Cons:Nil → Cons:Nil → Cons:Nil → Cons:Nil
hole_Cons:Nil1_0 :: Cons:Nil
hole_S:0'2_0 :: S:0'
hole_True:False3_0 :: True:False
gen_Cons:Nil4_0 :: Nat → Cons:Nil
gen_S:0'5_0 :: Nat → S:0'

Lemmas:
app(gen_Cons:Nil4_0(n7_0), gen_Cons:Nil4_0(b)) → gen_Cons:Nil4_0(+(n7_0, b)), rt ∈ Ω(1 + n70)
>(gen_S:0'5_0(n916_0), gen_S:0'5_0(n916_0)) → False, rt ∈ Ω(0)
<(gen_S:0'5_0(n1221_0), gen_S:0'5_0(+(1, n1221_0))) → True, rt ∈ Ω(0)
part(gen_S:0'5_0(0), gen_Cons:Nil4_0(n1532_0), gen_Cons:Nil4_0(c), gen_Cons:Nil4_0(d)) → gen_Cons:Nil4_0(+(c, d)), rt ∈ Ω(1 + c + n15320)

Generator Equations:
gen_Cons:Nil4_0(0) ⇔ Nil
gen_Cons:Nil4_0(+(x, 1)) ⇔ Cons(0', gen_Cons:Nil4_0(x))
gen_S:0'5_0(0) ⇔ 0'
gen_S:0'5_0(+(x, 1)) ⇔ S(gen_S:0'5_0(x))

No more defined symbols left to analyse.

(24) LowerBoundsProof (EQUIVALENT transformation)

The lowerbound Ω(n1) was proven with the following lemma:
app(gen_Cons:Nil4_0(n7_0), gen_Cons:Nil4_0(b)) → gen_Cons:Nil4_0(+(n7_0, b)), rt ∈ Ω(1 + n70)

(25) BOUNDS(n^1, INF)

(26) Obligation:

Innermost TRS:
Rules:
qs(x', Cons(x, xs)) → app(Cons(x, Nil), Cons(x', quicksort(xs)))
quicksort(Cons(x, Cons(x', xs))) → qs(x, part(x, Cons(x', xs), Nil, Nil))
quicksort(Cons(x, Nil)) → Cons(x, Nil)
quicksort(Nil) → Nil
part(x', Cons(x, xs), xs1, xs2) → part[Ite](>(x', x), x', Cons(x, xs), xs1, xs2)
part(x, Nil, xs1, xs2) → app(xs1, xs2)
app(Cons(x, xs), ys) → Cons(x, app(xs, ys))
app(Nil, ys) → ys
notEmpty(Cons(x, xs)) → True
notEmpty(Nil) → False
<(S(x), S(y)) → <(x, y)
<(0', S(y)) → True
<(x, 0') → False
>(S(x), S(y)) → >(x, y)
>(0', y) → False
>(S(x), 0') → True
part[Ite](True, x', Cons(x, xs), xs1, xs2) → part(x', xs, Cons(x, xs1), xs2)
part[False][Ite](True, x', Cons(x, xs), xs1, xs2) → part(x', xs, xs1, Cons(x, xs2))
part[Ite](False, x', Cons(x, xs), xs1, xs2) → part[False][Ite](<(x', x), x', Cons(x, xs), xs1, xs2)
part[False][Ite](False, x', Cons(x, xs), xs1, xs2) → part(x', xs, xs1, xs2)

Types:
qs :: S:0' → Cons:Nil → Cons:Nil
Cons :: S:0' → Cons:Nil → Cons:Nil
app :: Cons:Nil → Cons:Nil → Cons:Nil
Nil :: Cons:Nil
quicksort :: Cons:Nil → Cons:Nil
part :: S:0' → Cons:Nil → Cons:Nil → Cons:Nil → Cons:Nil
part[Ite] :: True:False → S:0' → Cons:Nil → Cons:Nil → Cons:Nil → Cons:Nil
> :: S:0' → S:0' → True:False
notEmpty :: Cons:Nil → True:False
True :: True:False
False :: True:False
< :: S:0' → S:0' → True:False
S :: S:0' → S:0'
0' :: S:0'
part[False][Ite] :: True:False → S:0' → Cons:Nil → Cons:Nil → Cons:Nil → Cons:Nil
hole_Cons:Nil1_0 :: Cons:Nil
hole_S:0'2_0 :: S:0'
hole_True:False3_0 :: True:False
gen_Cons:Nil4_0 :: Nat → Cons:Nil
gen_S:0'5_0 :: Nat → S:0'

Lemmas:
app(gen_Cons:Nil4_0(n7_0), gen_Cons:Nil4_0(b)) → gen_Cons:Nil4_0(+(n7_0, b)), rt ∈ Ω(1 + n70)
>(gen_S:0'5_0(n916_0), gen_S:0'5_0(n916_0)) → False, rt ∈ Ω(0)
<(gen_S:0'5_0(n1221_0), gen_S:0'5_0(+(1, n1221_0))) → True, rt ∈ Ω(0)

Generator Equations:
gen_Cons:Nil4_0(0) ⇔ Nil
gen_Cons:Nil4_0(+(x, 1)) ⇔ Cons(0', gen_Cons:Nil4_0(x))
gen_S:0'5_0(0) ⇔ 0'
gen_S:0'5_0(+(x, 1)) ⇔ S(gen_S:0'5_0(x))

No more defined symbols left to analyse.

(27) LowerBoundsProof (EQUIVALENT transformation)

The lowerbound Ω(n1) was proven with the following lemma:
app(gen_Cons:Nil4_0(n7_0), gen_Cons:Nil4_0(b)) → gen_Cons:Nil4_0(+(n7_0, b)), rt ∈ Ω(1 + n70)

(28) BOUNDS(n^1, INF)

(29) Obligation:

Innermost TRS:
Rules:
qs(x', Cons(x, xs)) → app(Cons(x, Nil), Cons(x', quicksort(xs)))
quicksort(Cons(x, Cons(x', xs))) → qs(x, part(x, Cons(x', xs), Nil, Nil))
quicksort(Cons(x, Nil)) → Cons(x, Nil)
quicksort(Nil) → Nil
part(x', Cons(x, xs), xs1, xs2) → part[Ite](>(x', x), x', Cons(x, xs), xs1, xs2)
part(x, Nil, xs1, xs2) → app(xs1, xs2)
app(Cons(x, xs), ys) → Cons(x, app(xs, ys))
app(Nil, ys) → ys
notEmpty(Cons(x, xs)) → True
notEmpty(Nil) → False
<(S(x), S(y)) → <(x, y)
<(0', S(y)) → True
<(x, 0') → False
>(S(x), S(y)) → >(x, y)
>(0', y) → False
>(S(x), 0') → True
part[Ite](True, x', Cons(x, xs), xs1, xs2) → part(x', xs, Cons(x, xs1), xs2)
part[False][Ite](True, x', Cons(x, xs), xs1, xs2) → part(x', xs, xs1, Cons(x, xs2))
part[Ite](False, x', Cons(x, xs), xs1, xs2) → part[False][Ite](<(x', x), x', Cons(x, xs), xs1, xs2)
part[False][Ite](False, x', Cons(x, xs), xs1, xs2) → part(x', xs, xs1, xs2)

Types:
qs :: S:0' → Cons:Nil → Cons:Nil
Cons :: S:0' → Cons:Nil → Cons:Nil
app :: Cons:Nil → Cons:Nil → Cons:Nil
Nil :: Cons:Nil
quicksort :: Cons:Nil → Cons:Nil
part :: S:0' → Cons:Nil → Cons:Nil → Cons:Nil → Cons:Nil
part[Ite] :: True:False → S:0' → Cons:Nil → Cons:Nil → Cons:Nil → Cons:Nil
> :: S:0' → S:0' → True:False
notEmpty :: Cons:Nil → True:False
True :: True:False
False :: True:False
< :: S:0' → S:0' → True:False
S :: S:0' → S:0'
0' :: S:0'
part[False][Ite] :: True:False → S:0' → Cons:Nil → Cons:Nil → Cons:Nil → Cons:Nil
hole_Cons:Nil1_0 :: Cons:Nil
hole_S:0'2_0 :: S:0'
hole_True:False3_0 :: True:False
gen_Cons:Nil4_0 :: Nat → Cons:Nil
gen_S:0'5_0 :: Nat → S:0'

Lemmas:
app(gen_Cons:Nil4_0(n7_0), gen_Cons:Nil4_0(b)) → gen_Cons:Nil4_0(+(n7_0, b)), rt ∈ Ω(1 + n70)
>(gen_S:0'5_0(n916_0), gen_S:0'5_0(n916_0)) → False, rt ∈ Ω(0)

Generator Equations:
gen_Cons:Nil4_0(0) ⇔ Nil
gen_Cons:Nil4_0(+(x, 1)) ⇔ Cons(0', gen_Cons:Nil4_0(x))
gen_S:0'5_0(0) ⇔ 0'
gen_S:0'5_0(+(x, 1)) ⇔ S(gen_S:0'5_0(x))

No more defined symbols left to analyse.

(30) LowerBoundsProof (EQUIVALENT transformation)

The lowerbound Ω(n1) was proven with the following lemma:
app(gen_Cons:Nil4_0(n7_0), gen_Cons:Nil4_0(b)) → gen_Cons:Nil4_0(+(n7_0, b)), rt ∈ Ω(1 + n70)

(31) BOUNDS(n^1, INF)

(32) Obligation:

Innermost TRS:
Rules:
qs(x', Cons(x, xs)) → app(Cons(x, Nil), Cons(x', quicksort(xs)))
quicksort(Cons(x, Cons(x', xs))) → qs(x, part(x, Cons(x', xs), Nil, Nil))
quicksort(Cons(x, Nil)) → Cons(x, Nil)
quicksort(Nil) → Nil
part(x', Cons(x, xs), xs1, xs2) → part[Ite](>(x', x), x', Cons(x, xs), xs1, xs2)
part(x, Nil, xs1, xs2) → app(xs1, xs2)
app(Cons(x, xs), ys) → Cons(x, app(xs, ys))
app(Nil, ys) → ys
notEmpty(Cons(x, xs)) → True
notEmpty(Nil) → False
<(S(x), S(y)) → <(x, y)
<(0', S(y)) → True
<(x, 0') → False
>(S(x), S(y)) → >(x, y)
>(0', y) → False
>(S(x), 0') → True
part[Ite](True, x', Cons(x, xs), xs1, xs2) → part(x', xs, Cons(x, xs1), xs2)
part[False][Ite](True, x', Cons(x, xs), xs1, xs2) → part(x', xs, xs1, Cons(x, xs2))
part[Ite](False, x', Cons(x, xs), xs1, xs2) → part[False][Ite](<(x', x), x', Cons(x, xs), xs1, xs2)
part[False][Ite](False, x', Cons(x, xs), xs1, xs2) → part(x', xs, xs1, xs2)

Types:
qs :: S:0' → Cons:Nil → Cons:Nil
Cons :: S:0' → Cons:Nil → Cons:Nil
app :: Cons:Nil → Cons:Nil → Cons:Nil
Nil :: Cons:Nil
quicksort :: Cons:Nil → Cons:Nil
part :: S:0' → Cons:Nil → Cons:Nil → Cons:Nil → Cons:Nil
part[Ite] :: True:False → S:0' → Cons:Nil → Cons:Nil → Cons:Nil → Cons:Nil
> :: S:0' → S:0' → True:False
notEmpty :: Cons:Nil → True:False
True :: True:False
False :: True:False
< :: S:0' → S:0' → True:False
S :: S:0' → S:0'
0' :: S:0'
part[False][Ite] :: True:False → S:0' → Cons:Nil → Cons:Nil → Cons:Nil → Cons:Nil
hole_Cons:Nil1_0 :: Cons:Nil
hole_S:0'2_0 :: S:0'
hole_True:False3_0 :: True:False
gen_Cons:Nil4_0 :: Nat → Cons:Nil
gen_S:0'5_0 :: Nat → S:0'

Lemmas:
app(gen_Cons:Nil4_0(n7_0), gen_Cons:Nil4_0(b)) → gen_Cons:Nil4_0(+(n7_0, b)), rt ∈ Ω(1 + n70)

Generator Equations:
gen_Cons:Nil4_0(0) ⇔ Nil
gen_Cons:Nil4_0(+(x, 1)) ⇔ Cons(0', gen_Cons:Nil4_0(x))
gen_S:0'5_0(0) ⇔ 0'
gen_S:0'5_0(+(x, 1)) ⇔ S(gen_S:0'5_0(x))

No more defined symbols left to analyse.

(33) LowerBoundsProof (EQUIVALENT transformation)

The lowerbound Ω(n1) was proven with the following lemma:
app(gen_Cons:Nil4_0(n7_0), gen_Cons:Nil4_0(b)) → gen_Cons:Nil4_0(+(n7_0, b)), rt ∈ Ω(1 + n70)

(34) BOUNDS(n^1, INF)